<?php

namespace dao;

use dao\fcfDao;
use utils\Utils;
use controladores\Logger;

define('TABLA_USUARIOS','usuarios');
define('TABLA_HISTORIAL_ACCESOS','historial_accesos');
define('CAMPOS_TABLA_USUARIOS','id,nom,usuario,password,email,perfil_usuario,intentos_fallidos,creado,activo');
define('CAMPOS_TABLA_HISTORIAL_ACCESOS','id,id_usuario,acceso,user_agent,ip');
define('CAMPOS_USUARIOS_RESET_PASS','id,usuario,email,string_val,fecha_caducidad,success');

class usuariosDao extends fcfDao{

	/*
	 * 
	 */
	function getUsuarios(){
		$queryString = "Select ".CAMPOS_TABLA_USUARIOS." from usuarios";
		
		try {
			return $this->select($queryString);
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
	
	/*
	 *
	 */
	function getUsuarioPorId($id){
		$queryString = "Select ".CAMPOS_TABLA_USUARIOS." from usuarios WHERE id=".$id;
	
		try {
			return $this->selectRow($queryString);
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
	
	function getUsuariosGestion(){
		try {
			$queryString = "SELECT t1.id,t1.nom,t1.usuario,t1.email,t1.perfil_usuario,t1.intentos_fallidos,t1.creado,t1.activo,t2.perfil FROM usuarios t1 LEFT JOIN usuarios_perfiles t2 ON t1.perfil_usuario=t2.cod_perfil";
			return $this->select($queryString);
		} catch (Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}

	/*
	 * 
	 */
	function getUsuarioPorNombre($usuario){
		$usuario = fcfDao::$con->real_escape_string($usuario);
		$query = "SELECT ".CAMPOS_TABLA_USUARIOS." from ".TABLA_USUARIOS." WHERE usuario='".$usuario."' AND activo=1 LIMIT 0,1 ;";
		
		if(!$result = $this->selectRow($query)){
			return false;
		}else{
			return $result;
		}
	}
	
	/*
	 * Retorna usuario si existe un registro con el nombre y password recibidos
	 */
	function getUsuarioPorNombreyPassword($usuario,$password){
		
		$usuario = fcfDao::$con->real_escape_string($usuario);
		//$password = fcfDao::$con->real_escape_string($password);
		
		$query = "SELECT ".CAMPOS_TABLA_USUARIOS." from ".TABLA_USUARIOS." WHERE usuario='".$usuario."' AND password='".$password."' AND activo=1 LIMIT 0,1 ;";

		if(!$result = $this->selectRow($query)){
			return false;
		}else{
			return $result;
		}
	}
	
	/*
	 * Al fallar el login incrementamos el campo de intentos fallidos.Al superar X intentos el usuario se bloquea
	 */
	function incrementarIntentoFallido($id){
	
		$query = "UPDATE usuarios SET intentos_fallidos = intentos_fallidos+1 WHERE id = ".$id;
		
		if(!$result = $this->update($query)){
			return false;
		}
	}
	
	/*
	 * Registra cada entrada del usuario a la web
	 */
	function registroLogin($usuario){
		
		$id_usuario = fcfDao::$con->real_escape_string($usuario->id);
		$navegador = fcfDao::$con->real_escape_string($_SERVER['HTTP_USER_AGENT']);
		
		$queryString = "INSERT INTO ".TABLA_HISTORIAL_ACCESOS." (".CAMPOS_TABLA_HISTORIAL_ACCESOS.") VALUES (null,".$id_usuario.",CURRENT_TIMESTAMP,'".$navegador."','".$_SERVER['REMOTE_ADDR']."')";
		
		if(!$this->insert($queryString)){
			return false;
		}
		
	}
	
	function perfilesUsuario(){
		$query = "SELECT cod_perfil,perfil FROM usuarios_perfiles";
		return $this->select($query);
	}
	
	/*
	 * Comprueba si el email recibido existe en un registro de usuario
	 */
	function comprobarEmail($email){
		$email = fcfDao::$con->real_escape_string($email);
		$queryString = "SELECT (SELECT EXISTS ( SELECT email FROM usuarios  WHERE email='".$email."' )) AS result ,id,email FROM usuarios  WHERE email='".$email."'";

		try {
			return $this->selectRow($queryString);
		} catch (Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
	
	/*
	 * Añadimos el registro de la ultima peticion de cambio de clave con el string de validacion de la URL 
	 */
	function addRegistroCanvioPassword($usuario,$mail,$string){
		
		try {
			$queryString = "INSERT INTO usuarios_reset_pass (".CAMPOS_USUARIOS_RESET_PASS.") VALUES (null,'".$usuario."','".$mail."','".$string."',CURRENT_TIMESTAMP + INTERVAL 6 HOUR,false);";

			$result = $this->insert($queryString);
			if($result["affected_rows"] >= 1 ){ return true;}
		} catch (Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
			return $e->getMessage();
		}
	}
	
	/*
	 * Devuelve la informacion de la ultima peticion de cambio de clave
	 */
	function getUltimaPeticionCanvioClave($email,$usuario){
		
		$email = fcfDao::$con->real_escape_string($email);
		$usuario = fcfDao::$con->real_escape_string($usuario);
		
		try {
			$queryString="SELECT * FROM usuarios_reset_pass WHERE usuario=".$usuario." AND email='".$email."' AND success=0 ORDER BY fecha_caducidad DESC LIMIT 0,1";
			return $this->selectRow($queryString);
		} catch (Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
			return $e->getMessage();
		}
	}
	
	
	function getHistorialAccesos(){
		$query = "SELECT * FROM historial_accesos";
		
		try{
			return $this->select($query);
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
			return $e->getMessage();
		}
	}
	
/*
	 * Modifica contraseña 
	 */
	function cambioClaveUsuario($id_usuario,$email,$password){
		
		$id_usuario = fcfDao::$con->real_escape_string($id_usuario);
		$email = fcfDao::$con->real_escape_string($email);
		$password = fcfDao::$con->real_escape_string($password);
		
		try {
			$queryString = "UPDATE usuarios SET password = '".$password."' WHERE id = ".$id_usuario." AND email='".$email."';";

			$result = $this->insert($queryString);
			if($result["affected_rows"] >= 1 ){ return true;}
		} catch (Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
			return $e->getMessage();
		}
	}
	
	/*
	 *  notificarCambioClave
	 */
	function notificarCambioClave($id){
		try {
			$queryString = "UPDATE usuarios_reset_pass SET success = TRUE WHERE id=".$id;
			$result = $this->update($queryString);
			if($result >= 1 ){ return true;}
		} catch (Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
			return $e->getMessage();
		}
	}
	
	/*
	 * Insertar nuevo usuario
	 * Se recibe un objeto con los datos ( nom/cognoms,usuario,email,perfil) 
	 */
	function insertarNuevoUsuario($aux){
		
		//$id_usuario = fcfDao::$con->real_escape_string($usuario->id);
		$nom = fcfDao::$con->real_escape_string($aux->nom);
		$usuario = fcfDao::$con->real_escape_string($aux->usuario);
		$email = fcfDao::$con->real_escape_string($aux->email);
		$perfil_usuario = fcfDao::$con->real_escape_string($aux->perfil_usuario);
		
		try {
			$queryString = "INSERT INTO ".TABLA_USUARIOS." (".CAMPOS_TABLA_USUARIOS.") VALUES (null,'".$nom."','".$usuario."','".$aux->password."','".$email."',".$perfil_usuario.",".$aux->intentos_fallidos.",CURRENT_TIMESTAMP,".$aux->activo.");";
			$result = $this->insert($queryString);
			if($result["affected_rows"] >= 1 ){ return true;}
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
			return $e->getMessage();
		}

	}
	
	/*
	* 
	*/
	function updateUsuario($info){
		
		if($info['edit_pass'] != "null"){ 
			$pass = ",password = '".$info['edit_pass']."'"; 
		}

		try {
			$queryString = "UPDATE usuarios SET nom = '".$info['edit_nom']."',usuario = '".$info['edit_usuario']."'".$pass.",email = '".$info['edit_email']."',perfil_usuario = '".$info['edit_perfil_usuario']."',intentos_fallidos = '".$info['edit_intentos_fallidos']."',activo = ".$info['edit_activo']." WHERE `id` = '".$info['edit_id_usuario']."';";
			return $this->update($queryString);
		} catch (Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
			return $e->getMessage();
		}
	}
}



?>